/**
  *stringtoint将字符串转换为数字
   *字符串a可以表示为数字的字符串
   *返回为数字
*/
int stringtoint(char *a)//字符串转换成数组
{
      int b;
      int i;
      int j;
      j=strlen(a);//获得字符串长度
      b=0;//初始化值
      for(i=0;i<j;i++)
        {
           b=b*10+(a[i]-'0');//将每位乘于加权值加起来
        }
        return b;//返回值
}
/**
   *analysis函数分析参数将theout，thein中变量初始化
    *参数为-L language -F filename -P problemnum -U username -T/-0  -Tl timelimit -ML merylimit -R runid 
*/
int analysis(char *args[]){ 

      
      int i;

      char filename[50];

	  strcpy(theout.la,args[2]);//确定语言类型c,cpp,cjava
   
      strcpy(filename,args[4]);//保存文件名
     
      strcpy(theout.pro,args[6]);//确定题号
 
      strcpy(theout.user,args[8]);//确定用户名
       
      if(strcmp(args[9],"-O")==0){
	          IsFile=1;
	        }
	      else{
	           IsFile=0;
	        }
	        //确定为文件输出或文件打印
    
	       TL=stringtoint(args[11])/1000.0;/*时间限制为ms级*///确定时间限制
           ML=stringtoint(args[13])*1024;/*内存限制为kb级*///确定内存限制     
            
      IsCheckCode=1;//默认检测危险代码
	     
  	theout.runid=args[15]; //确定执行 ID
            
   
      

      
      
      
        
	/**
           *初始化输出结构体中需要初始化的变量
        */
	 theout.memery=0;//内存占用量初始化为0	
	 strcpy(theout.result,"WRONG");//结果初始化为wrong
	 theout.time=0;//时间初始化为0
  
	

	/**
          *输入结构体中需要初始化的变量
        */
        strcpy(thein.path,path);
	  strcat(thein.path,BAC);//将代码路径初始化

        strcpy(thein.outpro,path);
	  strcat(thein.outpro,PUBT);//初始化执行程序路径

 	  strcpy(thein.outproname,path);
	  strcat(thein.outproname,PUBT);//初始化执行程序名路径

	  strcpy(thein.rightanswer,path);
	  strcat(thein.rightanswer,PUBR);//初始化正确结果路径

        strcpy(thein.checkexamp,path);
	  strcat(thein.checkexamp,PUBCL);//初始化测试用例路径

	/**
	   *分析代码类型,存放路径,题号，用户名，最后输出为文件或屏幕打印时间限制内存限制
           */  
		 if(strcmp(theout.la,"java")==0){//代码为java语言               
                    
		      IsCheckCode=0;//不检测代码危险性
	       	strcpy(thein.cmdgcc,CJAVA);//变为java编译器	 
                  for(i=0;filename[i]!='.';i++);       		         
                  filename[i+1]='j';                             
			strcat(thein.path,filename); //确定代码路径                                    
                      
	         }
	       else if(strcmp(theout.la,"cpp")==0){//代码为c++
                  
			strcat(thein.path,filename);//确定代码存放路径
	            strcpy(thein.cmdgcc,CCPP);
	       	       //确定代码类型和编译器g++	

		 } 
             else{	
  			strcat(thein.path,filename);//确定代码存放路径			
                  strcpy(thein.cmdgcc,CC);//初始化编译器为gcc
                 } 
                //确定代码类型和编译器默认为C	
	/**
	  *设置测试产生零时文件
        */
	strcat(thein.outproname,theout.user);
	strcat(thein.outproname,theout.pro);//thein.outproname变为了路径/用户名+题号
      strcat(thein.outtemp,thein.outproname);//代码执行时输出结果保存于此文件内名字为路径+用户名+题号
        /**
	  *设置代码生成程序的名字，和执行命令
        */
      if(strcmp(theout.la,"java")!=0){
            
      	strcat(thein.outproname,".out");//设置c/c++的编译后可执行文件名为路径+用户名+题号+.out
     		strcat(thein.outpro,"./");          
  		strcat(thein.outpro,theout.user);
  		strcat(thein.outpro,theout.pro);
 		strcat(thein.outpro,".out");//设置c/c++编译后可执行命令为路径/./用户名+题号+,out           
       }
      //c/c++情况
         
      else{
                         
           filename[i]='\0';         //设置java编译后可执行名,和文件名，只取文件名去掉了扩展名
           strcpy(thein.outpro,filename);//可执行名为文件名,因为主类名比须于文件名相同
           strcpy(thein.outproname,path);
           strcat(thein.outproname,PUBT);
           strcat(thein.outproname,filename);
           strcat(thein.outproname,".class");   
             /**
 		*编译后文夹名为主类名.class 
                *为了方便要求选手将主类名取为文件名一样
                *与代码文件名相同比免编译出错  
             */        
            }                    
        //java情况
        /**
          *设置测试用例路径
         */

         strcat(thein.checkexamp,theout.pro);//设置测试用例路径test/题号目录/
 	   strcat(thein.checkexamp,"/");
       
       //thein.checkexamp=PUBCL/0101/里面为测试输入文件
  	
  	/**
	   *设置正确结果路径
        */
         strcat(thein.rightanswer,theout.pro);//设置正确结果路径right/题号目录/
         strcat(thein.rightanswer,"/");/*thein.rightanswer=PUBR/0101/里面为正确答案*/
    
        /**
	   *设置gcc产生零时文件路径
        */
         strcpy(thein.gccttemp,path);
         strcat(thein.gccttemp,PUBT);
  	   strcat(thein.gccttemp,theout.user);
  	   strcat(thein.gccttemp,theout.pro);
         strcat(thein.gccttemp,theout.runid);//设置编译结果路径为保证唯一性取名为tmep/用户名题号执行ID号gc
  	   strcat(thein.gccttemp,"gc");/*PUBT/kinet0101runidgc*/
  
           //设置最终结果路径
	   if(IsFile==1){
         strcpy(thein.final,path); 
         strcat(thein.final,FINAL);        
         strcat(thein.final,theout.user);
         strcat(thein.final,"_"); 
         strcat(thein.final,theout.pro);
	     strcat(thein.final,"_"); 
         strcat(thein.final,args[11]);
         strcat(thein.final,"_"); 
         strcat(thein.final,args[13]);
         strcat(thein.final,"_"); 
         strcat(thein.final,args[15]);
            }//设置最终结果路径为result/用户名_题号_时间限制_内存限制文件_执行ID内


         

}